+2009-01-12 Tor Lillqvist <tml@iki.fi>
+
+ * gdk/gdk.c (gdk_arg_debug_cb) (gdk_arg_no_debug_cb): A
+ GOptionArgFunc should return gboolean and take also a GError
+ pointer parameter, so make these two functions do that. Return
+ FALSE (and set the GError) if the parsing of the debug string
+ failed completely. Note that g_parse_debug_string() doesn't really
+ have any way to return parsing status, and accepts partially
+ incorrect strings, though.
+
2009-01-12 Claudio Saavedra <csaavedra@igalia.com>
Bug 567468 – no check for trailing != NULL in
#endif /* G_ENABLE_DEBUG */
#ifdef G_ENABLE_DEBUG
-static void
-gdk_arg_debug_cb (const char *key, const char *value, gpointer user_data)
+static gboolean
+gdk_arg_debug_cb (const char *key, const char *value, gpointer user_data, GError **error)
{
- _gdk_debug_flags |= g_parse_debug_string (value,
+ guint debug_value = g_parse_debug_string (value,
(GDebugKey *) gdk_debug_keys,
gdk_ndebug_keys);
+
+ if (debug_value == 0 && value != NULL && strcmp (value, "") != 0)
+ {
+ g_set_error (error,
+ G_OPTION_ERROR, G_OPTION_ERROR_FAILED,
+ _("Error parsing option --gdk-debug"));
+ return FALSE;
+ }
+
+ _gdk_debug_flags |= debug_value;
+
+ return TRUE;
}
-static void
-gdk_arg_no_debug_cb (const char *key, const char *value, gpointer user_data)
+static gboolean
+gdk_arg_no_debug_cb (const char *key, const char *value, gpointer user_data, GError **error)
{
- _gdk_debug_flags &= ~g_parse_debug_string (value,
- (GDebugKey *) gdk_debug_keys,
- gdk_ndebug_keys);
+ guint debug_value = g_parse_debug_string (value,
+ (GDebugKey *) gdk_debug_keys,
+ gdk_ndebug_keys);
+
+ if (debug_value == 0 && value != NULL && strcmp (value, "") != 0)
+ {
+ g_set_error (error,
+ G_OPTION_ERROR, G_OPTION_ERROR_FAILED,
+ _("Error parsing option --gdk-no-debug"));
+ return FALSE;
+ }
+
+ _gdk_debug_flags &= ~debug_value;
+
+ return TRUE;
}
#endif /* G_ENABLE_DEBUG */